Spring Framework-এ Jackson অ্যানোটেশন ব্যবহার করার মাধ্যমে JSON ডেটা Serialization এবং Deserialization কাস্টমাইজ করা যায়। Spring Boot এ Jackson ডিফল্টভাবে ব্যবহার করা হয়, বিশেষ করে REST APIs-এ JSON ডেটা আদান-প্রদানের জন্য।
Spring-এ Jackson অ্যানোটেশন ব্যবহারের মাধ্যমে আপনি JSON আউটপুট বা ইনপুট ফিল্ডগুলোর নাম কাস্টমাইজ, বিশেষ ধরনের ফিল্ড সিরিয়ালাইজ/ডেসিরিয়ালাইজ করতে পারেন, এবং অন্য অনেক কাস্টমাইজেশন করতে পারেন।
এখানে Spring Integration সহ Jackson অ্যানোটেশন ব্যবহারের Practical উদাহরণ দেখানো হবে।
প্রকল্পের সেটআপ:
Spring Boot Application তৈরি করে Jackson অ্যানোটেশন ব্যবহার করা হবে। প্রথমে আপনাকে Spring Boot project তৈরি করতে হবে এবং spring-boot-starter-web ডিপেনডেন্সি যোগ করতে হবে। Jackson ডিফল্টভাবে Spring Boot এর সাথে অন্তর্ভুক্ত থাকে।
pom.xml-এ Jackson ডিপেনডেন্সি:
<dependencies>
<!-- Spring Boot Web Starter (includes Jackson) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
1. Custom Annotations সহ Spring Controller
এখানে আমরা একটি REST Controller তৈরি করব যেখানে Jackson Annotations ব্যবহৃত হবে।
Model Class (DTO) - Employee
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Employee {
@JsonProperty("employee_id") // JSON এর ফিল্ড নাম কাস্টমাইজ
private int id;
@JsonProperty("employee_name") // JSON এর ফিল্ড নাম কাস্টমাইজ
private String name;
@JsonFormat(pattern = "yyyy-MM-dd") // Date ফরম্যাট কাস্টমাইজ
private String joinDate;
// Constructors, Getters, and Setters
public Employee(int id, String name, String joinDate) {
this.id = id;
this.name = name;
this.joinDate = joinDate;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getJoinDate() {
return joinDate;
}
}
এখানে, @JsonProperty অ্যানোটেশনটি JSON আউটপুটের ফিল্ড নাম কাস্টমাইজ করার জন্য ব্যবহৃত হয়েছে, এবং @JsonFormat অ্যানোটেশনটি তারিখের ফরম্যাট নির্ধারণ করে।
Spring REST Controller - EmployeeController
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
@RestController
public class EmployeeController {
@GetMapping("/employees")
public List<Employee> getEmployees() {
Employee emp1 = new Employee(1, "Rahim", "2024-01-01");
Employee emp2 = new Employee(2, "Karim", "2023-08-15");
return Arrays.asList(emp1, emp2);
}
}
এখানে, @RestController Spring-এ RESTful APIs তৈরি করার জন্য ব্যবহৃত হয়। /employees endpoint এ দুটি Employee অবজেক্ট রিটার্ন করা হচ্ছে।
2. Spring Configuration File
Spring Boot সিস্টেমে Jackson ডিফল্ট কনফিগারেশন হিসেবে যুক্ত থাকে। আপনি যদি JSON ডেটা ফরম্যাট কাস্টমাইজ করতে চান তবে ObjectMapper কনফিগার করতে পারেন।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
// Disable WRITE_DATES_AS_TIMESTAMPS to make sure dates are in string format
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
return objectMapper;
}
}
এখানে WRITE_DATES_AS_TIMESTAMPS ফিচারটি বন্ধ করা হয়েছে, যাতে Jackson তারিখকে Unix টাইমস্ট্যাম্প হিসেবে না, বরং ISO 8601 ফরম্যাটে JSON হিসেবে serialize করে।
3. Spring Boot Application Class
Spring Boot অ্যাপ্লিকেশন চালানোর জন্য মূল @SpringBootApplication ক্লাসটি থাকবে।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class JacksonAnnotationApplication {
public static void main(String[] args) {
SpringApplication.run(JacksonAnnotationApplication.class, args);
}
}
4. JSON Response Example
যখন আপনি GET /employees endpoint এ কল করবেন, তখন এটি একটি JSON রেসপন্স রিটার্ন করবে যা Jackson Annotations এর মাধ্যমে কাস্টমাইজ করা হয়েছে।
Sample JSON Output:
[
{
"employee_id": 1,
"employee_name": "Rahim",
"joinDate": "2024-01-01"
},
{
"employee_id": 2,
"employee_name": "Karim",
"joinDate": "2023-08-15"
}
]
এখানে:
employee_idএবংemployee_nameকাস্টম নাম দিয়ে JSON-এ আউটপুট এসেছে, যা@JsonPropertyঅ্যানোটেশন দিয়ে নির্ধারণ করা হয়েছে।joinDateফিল্ডটিyyyy-MM-ddফরম্যাটে সিরিয়ালাইজ হয়েছে, যা@JsonFormatঅ্যানোটেশন দিয়ে কাস্টমাইজ করা হয়েছে।
5. JSON Request Example (Deserialization)
যখন আপনি JSON ইনপুট পাঠাবেন, Jackson স্বয়ংক্রিয়ভাবে সেই JSON ডেটাকে Java অবজেক্টে ডেসিরিয়ালাইজ করে নিবে।
Sample JSON Input:
{
"employee_id": 3,
"employee_name": "John",
"joinDate": "2022-07-19"
}
Spring Controller for Deserialization:
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class EmployeeController {
@PostMapping("/employee")
public String createEmployee(@RequestBody Employee employee) {
return "Employee Created: " + employee.getName();
}
}
এখানে, @RequestBody অ্যানোটেশন ব্যবহার করে JSON ডেটা Employee অবজেক্টে ডেসিরিয়ালাইজ করা হচ্ছে। আপনি JSON ইনপুট পাঠালে, Spring Jackson অ্যানোটেশন ব্যবহার করে সেই ডেটাকে অবজেক্টে রূপান্তর করবে।
- Jackson অ্যানোটেশন Spring Boot-এ JSON সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন কাস্টমাইজ করার জন্য খুবই কার্যকর।
@JsonProperty,@JsonFormat, এবং অন্যান্য Jackson অ্যানোটেশন ব্যবহার করে ফিল্ডের নাম, তারিখ/সময় ফরম্যাট, এবং অন্যান্য কাস্টম লজিক নিয়ন্ত্রণ করা সম্ভব।- Spring Boot অ্যাপ্লিকেশন এর মধ্যে Jackson ডিফল্টভাবে অন্তর্ভুক্ত থাকে, এবং
ObjectMapperকনফিগারেশন এর মাধ্যমে আরও উন্নত কাস্টমাইজেশন করা যায়।
এই উদাহরণটি দেখিয়ে দেওয়া হল কিভাবে Jackson অ্যানোটেশন Spring Framework এর মধ্যে JSON ফরম্যাটে কাজ করার সময় ব্যবহার করা যায়।
Read more